package actions;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;

import modelo.Comentario;
import modelo.Tesina;
import modelo.TesisVisible;

import org.apache.struts2.interceptor.SessionAware;

import DAO.ComentarioDAO;
import DAO.FactoryDAO;
import DAO.PalabraClaveDAO;
import DAO.TesinaDAO;
import DAO.VotacionDAO;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class VerTesisCompleta  extends ActionSupport implements SessionAware{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	

	private Long id_tesis;
	private Collection<Comentario> collComentarios = new ArrayList<Comentario>();
	private String votoPos;
	private String votoNeg;
	private String fechaPresentacion;
	private int cantColl=0;
	private Map<String, Object> session;
	private Tesina tesisOriginal= new Tesina();
	private TesisVisible tesis= new TesisVisible();

	public String execute() {
		//carga de comentarios desde la base
		this.cargarComentarios();
		//carga de tesis desde la base
		this.cargarContenidotesis();
		//variables para el sistema de votacion
		session = ActionContext.getContext().getSession();
		this.verificarVotacion();
		session.put("idTesis", getId_tesis());	
		session.put("dinamico", "true");
		return "SUCCESS";
	}

	private void cargarContenidotesis() {
		TesinaDAO tesinaDAO = FactoryDAO.getTesinaDAO();
		tesisOriginal = tesinaDAO.buscarTesis(getId_tesis());
		convertirTesis(tesisOriginal);
		fechaPresentacion = tesis.getFechaPresentacion().toString();
		
		
	}

	private void cargarComentarios() {
		
		ComentarioDAO comentarioDAO = FactoryDAO.getComentarioDAO();
		collComentarios = comentarioDAO.obtenerComentariosporIdTesis(getId_tesis());
		cantColl = collComentarios.size();// TODO Auto-generated method stub
		
	}

	private void verificarVotacion() {
		
		votoNeg = tesisOriginal.getVotoNegativos();
		votoPos = tesisOriginal.getVotoPositivos();
		VotacionDAO vDAO = FactoryDAO.getVotacionDAO();
		Long idUsuario =(Long) session.get("id");
		if (idUsuario != null) {
			if (!(vDAO.buscarVotacion(id_tesis, idUsuario))) {
				session.put("votacion", "/jsp/layoutVerTesina/puedeVotar.jsp");
			} else {
				session.put("votacion", "/jsp/layoutVerTesina/noPuedeVotar.jsp");
			}
		}else{
			session.put("votacion", "/jsp/layoutVerTesina/noPuedeVotar.jsp");
		}
		
	}

	public void convertirTesis(Tesina tesisOriginal) {

		PalabraClaveDAO palabraClaveDAO = FactoryDAO.getPalabraClaveDAO();
		tesis.setAutor(tesisOriginal.getAutor());
		tesis.setCarrera(tesisOriginal.getCarrera());
		tesis.setConcluciones(tesisOriginal.getConcluciones());
		tesis.setDirector(tesisOriginal.getDirector());
		tesis.setFechaPresentacion(tesisOriginal.getFechaPresentacion());
		tesis.setId(tesisOriginal.getId());
		tesis.setResumen(tesisOriginal.getResumen());
		tesis.setTitulo(tesisOriginal.getTitulo());
		tesis.setTrabajosFuturos(tesisOriginal.getTrabajosFuturos());
		tesis.setTrabajosRealizados(tesisOriginal.getTrabajosRealizados());
		tesis.setPalabrasClaves(palabraClaveDAO.buscarPalabrasClavesPorIdTesis(tesisOriginal.getId()));
		

	}
	
	public Long getId_tesis() {
		return id_tesis;
	}

	public void setId_tesis(Long id_tesis) {
		this.id_tesis = id_tesis;
	}

	public Collection<Comentario> getCollComentarios() {
		return collComentarios;
	}

	public void setCollComentarios(Collection<Comentario> collComentarios) {
		this.collComentarios = collComentarios;
	}

	public String getVotoPos() {
		return votoPos;
	}

	public void setVotoPos(String votoPos) {
		this.votoPos = votoPos;
	}

	public String getVotoNeg() {
		return votoNeg;
	}

	public void setVotoNeg(String votoNeg) {
		this.votoNeg = votoNeg;
	}

	
	@Override
	public void setSession(Map<String, Object> arg0) {
		// TODO Auto-generated method stub

	}

	public int getCantColl() {
		return cantColl;
	}

	public void setCantColl(int cantColl) {
		this.cantColl = cantColl;
	}


	public String getFechaPresentacion() {
		return fechaPresentacion;
	}

	public void setFechaPresentacion(String fechaPublicacion) {
		this.fechaPresentacion = fechaPublicacion;
	}

	public Tesina getTesisOriginal() {
		return tesisOriginal;
	}

	public void setTesisOriginal(Tesina tesisOriginal) {
		this.tesisOriginal = tesisOriginal;
	}

	public TesisVisible getTesis() {
		return tesis;
	}

	public void setTesis(TesisVisible tesis) {
		this.tesis = tesis;
	}
	
	
}
